# 编译器
CC = nvcc

# CUDA 路径
CUDA_PATH = /usr/local/cuda

# 编译选项
CFLAGS  = -Xcompiler -Wall -I$(CUDA_PATH)/include -I/usr/include -arch=sm_80

# 链接选项
LDFLAGS = -L$(CUDA_PATH)/lib64 -L/usr/lib/x86_64-linux-gnu

# 外部库链接选项
LDLIBS = -lnccl -lcudart -lcuda

# 目标可执行文件
TARGET = main

# 源文件
SRCS = communicator.cu

# 生成的目标文件
OBJS = $(SRCS:.cu=.o)

# 默认目标
all: $(TARGET)

# 生成可执行文件
$(TARGET): $(OBJS)
	$(CC) $(LDFLAGS) $(OBJS) $(LDLIBS) -o $(TARGET)

# 生成目标文件
%.o: %.cu
	$(CC) $(CFLAGS) -c $< -o $@

# 清理生成的文件
clean:
	rm -f $(OBJS) $(TARGET)

# 伪目标
.PHONY: all clean

# make MPI=1 MPI_HOME=/usr/lib/x86_64-linux-gnu/openmpi CUDA_HOME=/usr/local/cuda NCCL_HOME=/usr

# 单机2卡，每个mpi进程使用一张卡
# mpirun -np 2 -N 1 ./all_reduce_perf -b 128M -e 1024M -f 2 -g 1